/**
 * 引入Axios库，qs库
 */
import axios from 'axios'
import qs from 'query-string'
import {
  Message,
  Loading, validateRangeInOneMonth
} from 'element-ui'
/**
 * 基类定义
 */
var loadingInstance = null;
class BaseModule {
  /**
   * 初始化构造方法
   */
  constructor() {

    /**
     * $http属性，实质为axios实例变量
     */
    this.$http = axios.create({
      // baseURL: 'http://127.0.0.1/8080/www_1/service/pf',
      //     baseURL: 'http://127.0.0.1:80',
      baseURL: 'http://47.106.96.172:80',
      timeout: 10000 * 60 // (超时时间，单位为毫秒)
    })
    // this.$http.defaults.withCredentials = true;
    // // 添加请求拦截器
    // this.$http.interceptors.request.use(function(config) {
    //   // 在发送请求之前做些什么
    //   loadingInstance = Loading.service({ fullscreen: true,text:"数据加载中，请等待！" });
    //   return config;
    // }, function(error) {
    //   loadingInstance.close();
    //   // 对请求错误做些什么
    //   return Promise.reject(error);
    // });

    this.$http.interceptors.response.use(
      (res) => {
        if (res.data && res.data.code && res.data.code.toString() != '200') {
            if(res.data.data&&res.data.data.indexOf('不可修改')>-1){

            }else{
                Message({
                    //  饿了么的消息弹窗组件,类似toast
                    showClose: true,
                    message: res.data.message ?
                        res.data.message : "服务器内部错误",
                    type: "error"
                });
            }

        }
        return res;
    },
      (error) => {
        loadingInstance.close();
        Message({
          //  饿了么的消息弹窗组件,类似toast
          showClose: true,
          message: '服务器连接异常',
          type: "error"
        });
        return Promise.reject(error);
      }
    );

    /**
     * dataMethodDefaults属性，封装好了的HTTP头部以及响应结果处理方法
     */
    this.dataMethodDefaults = {
      headers: {
        'Content-Type': 'application/x-www-form-urlencoded'
      },
      transformRequest: [function(data) {
        const temp = qs.stringify(data)
        return temp
      }]
    }
  }

  /**
   * Get请求
   * @param {*} url 路径
   * @param {*} config 配置
   */
  get(url, config = {}) {
    return this.$http.get(url, config)
  }

  /**
   * Post请求
   * @param {*} url 路径
   * @param {*} data 内容
   * @param {*} config 配置
   */
  post(url, data = undefined, config = {}) {
    return this.$http.post(url, data, { ...this.dataMethodDefaults,
      ...config
    })
  }

  /**
   * Put请求
   * @param {*} url 路径
   * @param {*} data 内容
   * @param {*} config 配置
   */
  put(url, data = undefined, config = {}) {
    return this.$http.put(url, data, { ...this.dataMethodDefaults,
      ...config
    })
  }

  /**
   * Delete请求
   * @param {*} url 路径
   * @param {*} config 配置
   */
  delete(url, config = {}) {
    return this.$http.delete(url, config)
  }
}

export default BaseModule
